from django.shortcuts import render
from rest_framework.response import Response
from rest_framework.views import APIView
from libs.captcha.captcha import captcha
from django_redis import get_redis_connection
from django.http import HttpResponse

from libs.yuntongxun.sms import CCP
from .serializers import RegisterSmsCodeSerializer
from random import randint
from . import constans

# Create your views here.





class RegisterImageCodeView(APIView):
    """
    1 需要一个uuid 这个uuid用于记录，图片验证码，用于后期的校验
    2生成一个图片验证码 还需要返回图片验证码的内容
    3保存图片验证码
    4返回图片
    GET /verifications/imagecodes/uuid
    GET /verifications/imagecodes/?P<image_code_id>.+)/
    """
    def get(self,request,image_code_id):
        text,image = captcha.generate_captcha()

        #链接redis
        redis_conn = get_redis_connection('code')
        redis_conn.setex('img_%s'%image_code_id,60,text)
        return HttpResponse(image,content_type = 'image/jpeg')
        #必须告知浏览器正确的类型



class RegisterSmsCodeView(APIView):
    """
    一 分析页面的思路逻辑
    二 根据逻辑确定请求方式和url
    三 根据步骤实现功能
    1当用户点击获取短信验证码按钮的时候，需要秦端将，手机号，图片验证码和uuid返回
    2进行数据校验
    3生成短信
    4发送短信
    5记录短信
    6返回

    """
    def get(self,request,mobile):
        query_params = request.query_params
        #1获取参数
        #2校验参数

        # text = query_params.get('text')
        # image_code_id = query_params.get('image_code_id')
        # if not all([text,image_code_id]):
        #     pass
        # if text != xxx:
        #创建一个序列化器
        serializer = RegisterSmsCodeSerializer(data=query_params)
        #验证
        serializer.is_valid(raise_exception=True)

        #2生成短信
        sms_code = '%06d'%randint(0,999999)
        #3保存到redis中
        redis_conn = get_redis_connection('code')

        redis_conn.setex('sms_%s'%mobile,constans.SMS_CODE_EXPIRE, sms_code)

        # #4发送短信
        # ccp = CCP()
        # # 注意： 测试的短信模板编号为1
        # ccp.send_template_sms('mobile', ['sms_code', 5], 1)
        from celery_tasks.sms.tasks import send_sms_code
        send_sms_code.delay(mobile,sms_code)
        #返回响应
        return Response({'message':'ok'})

